﻿#include "page13.h"
#include"LocalDialog.h"
#include"RemoteDialog.h"
#include "databaseManager.h"
#include"mainwindow.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTableWidget>
#include <QLabel>
#include <QPixmap>
#include <QPalette>
#include <QHeaderView>
#include "page6.h"
#include <QSqlTableModel>
#include <QSqlQuery>
#include <QMessageBox>




Page13::Page13(QWidget *parent) :
    QWidget(parent),
    localDialog(nullptr),
    remoteDialog(nullptr),
    mainLayout(new QVBoxLayout(this)),
    chartView(nullptr)
{
    // 设置窗口大小
    setFixedSize(1280, 720);

    // 设置背景
    QPixmap background(":new/prefix1/bg.jpg");
    QLabel* backgroundLabel = new QLabel(this);
    backgroundLabel->setPixmap(background.scaled(this->size())); // 缩放背景图片以适应窗口大小
    backgroundLabel->setGeometry(0, 0, this->width(), this->height());
    backgroundLabel->lower();

    // 设置按钮的初始Y轴位置
    int yPos = 222;

    // Assuming you have a QIcon object created from your image file
    QIcon icon1(":new/prefix1/order.jpg");
    QIcon icon11(":new/prefix1/order2.jpg");
    // Create the QPushButton and set its properties
    orderButton = new QPushButton(this);
    orderButton->setIcon(icon1);  // Set the icon
    orderButton->setIconSize(QSize(260, 71));  // Set the icon size
    orderButton->setFlat(true);  // Make the button flat (no background)
    orderButton->setFixedSize(260, 71);  // Set the fixed size of the button
    orderButton->setGeometry(1, yPos, 260, 71);
    connect(orderButton, &QPushButton::clicked, this, [this](){
        emit orderRequested();
    });
    connect(orderButton, &QPushButton::pressed, this, [this, icon11]() {
        orderButton->setIcon(icon11);  // Change to icon10 when pressed
    });

    connect(orderButton, &QPushButton::released, this, [this, icon1]() {
        orderButton->setIcon(icon1);  // Revert to icon1 when released
        emit orderRequested();  // Emit the signal after the button is released
    });

    // 调整下一个按钮的Y轴位置
    yPos += 68;

    // 创建并设置生产按钮
    QIcon icon2(":new/prefix1/production.jpg");
    QIcon icon12(":new/prefix1/production2.jpg");
    productionButton = new QPushButton("", this);
    productionButton->setIcon(icon2);  // Set the icon
    productionButton->setIconSize(QSize(260, 71));  // Set the icon size
    productionButton->setFlat(true);  // Make the button flat (no background)
    productionButton->setFixedSize(260, 71);  // Set the fixed size of the button
    productionButton->setGeometry(1, yPos, 260, 71);
    connect(productionButton, &QPushButton::clicked, this, [this]() {
        emit productionRequested();
    });
    connect(productionButton, &QPushButton::pressed, this, [this, icon12]() {
        productionButton->setIcon(icon12);
    });

    connect(productionButton, &QPushButton::released, this, [this, icon2]() {
        productionButton->setIcon(icon2);
        emit productionRequested();  // Emit the signal after the button is released
    });

    // 调整下一个按钮的Y轴位置
    yPos += 68;

    // 创建并设置财务按钮
    QIcon icon3(":new/prefix1/finance.jpg");
    QIcon icon13(":new/prefix1/finance2.jpg");
    financeButton = new QPushButton("", this);
    financeButton->setIcon(icon3);  // Set the icon
    financeButton->setIconSize(QSize(260, 71));  // Set the icon size
    financeButton->setFlat(true);  // Make the button flat (no background)
    financeButton->setFixedSize(260, 71);  // Set the fixed size of the button
    financeButton->setGeometry(1, yPos, 260, 71);
    connect(financeButton, &QPushButton::clicked, this, [this]() {
        emit financeRequested();
    });
    connect(financeButton, &QPushButton::pressed, this, [this, icon13]() {
        financeButton->setIcon(icon13);
    });

    connect(financeButton, &QPushButton::released, this, [this, icon3]() {
        financeButton->setIcon(icon3);
        emit financeRequested();  // Emit the signal after the button is released
    });


    // 调整下一个按钮的Y轴位置
    yPos += 68;

    // 创建并设置库存按钮
    QIcon icon4(":new/prefix1/warehouse.jpg");
    QIcon icon14(":new/prefix1/warehouse2.jpg");
    warehouseButton = new QPushButton("", this);
    warehouseButton->setIcon(icon4);  // Set the icon
    warehouseButton->setIconSize(QSize(260, 71));  // Set the icon size
    warehouseButton->setFlat(true);  // Make the button flat (no background)
    warehouseButton->setFixedSize(260, 71);  // Set the fixed size of the button
    warehouseButton->setGeometry(1, yPos, 260, 71);
    connect(warehouseButton, &QPushButton::clicked, this, [this]() {
        emit storeRequested();
    });

    connect(warehouseButton, &QPushButton::pressed, this, [this, icon14]() {
        warehouseButton->setIcon(icon14);
    });

    connect(warehouseButton, &QPushButton::released, this, [this, icon4]() {
        warehouseButton->setIcon(icon4);
        emit storeRequested();  // Emit the signal after the button is released
    });

    // 调整下一个按钮的Y轴位置



    yPos += 68;
    //用户指南按钮
    QIcon icon6(":new/prefix1/operationGuide.jpg");
    QIcon icon16(":new/prefix1/operationGuide2.jpg");
    helpButton = new QPushButton("", this);
    helpButton->setIcon(icon6);  // Set the icon
    helpButton->setIconSize(QSize(260, 71));  // Set the icon size
    helpButton->setFlat(true);  // Make the button flat (no background)
    helpButton->setFixedSize(260, 71);  // Set the fixed size of the button
    helpButton->setGeometry(1, yPos, 260, 71);

    connect(helpButton, &QPushButton::clicked, this, [this]() {
        emit pageRequested10();
    });

    connect(helpButton, &QPushButton::pressed, this, [this, icon16]() {
         helpButton->setIcon(icon16);
    });
    connect(helpButton, &QPushButton::released, this, [this, icon6]() {
        helpButton->setIcon(icon6);
        emit pageRequested10();  // Emit the signal after the button is released
    });

    //连接按钮
         yPos += 68;
        QIcon icon7(":new/prefix1/connect.jpg");
        QIcon icon17(":new/prefix1/connect2.jpg");
        connectButton = new QPushButton("", this);
        connectButton->setIcon(icon17);  // Set the icon
        connectButton->setIconSize(QSize(260, 71));  // Set the icon size
        connectButton->setFlat(true);  // Make the button flat (no background)
        connectButton->setFixedSize(260, 71);  // Set the fixed size of the button
        connectButton->setGeometry(1, yPos, 260, 71);

        connect(connectButton, &QPushButton::clicked, this, [this]() {
            emit pageRequested13();
        });

        connect(connectButton, &QPushButton::pressed, this, [this, icon7]() {
             connectButton->setIcon(icon7);
        });
        connect(connectButton, &QPushButton::released, this, [this, icon17]() {
            connectButton->setIcon(icon17);
            emit pageRequested13();  // Emit the signal after the button is released
        });
        yPos += 68;

        // 创建并设置添加员工按钮
        QIcon icon5(":new/prefix1/tianjiayuangong01.jpg");
        QIcon icon15(":new/prefix1/tianjiayuangong02.jpg");
        addEmployeeButton = new QPushButton("", this);
        addEmployeeButton->setIcon(icon5);  // Set the icon
        addEmployeeButton->setIconSize(QSize(260, 71));  // Set the icon size
        addEmployeeButton->setFlat(true);  // Make the button flat (no background)
        addEmployeeButton->setFixedSize(260, 71);  // Set the fixed size of the button
        addEmployeeButton->setGeometry(1, yPos, 260, 71);
         connect(addEmployeeButton, &QPushButton::pressed, this, [this, icon15]() {
              addEmployeeButton->setIcon(icon15);
          });
         connect(addEmployeeButton, &QPushButton::released, this, [this, icon5]() {
             addEmployeeButton->setIcon(icon5);
             emit addEmployeeRequested();  // Emit the signal after the button is released
         });


    // 连接按钮信号
    connect(productionButton, &QPushButton::clicked, this, [this]() {
        emit productionRequested();
    });
    connect(orderButton, &QPushButton::clicked, this, [this]() {
        emit orderRequested();
    });
    connect(financeButton, &QPushButton::clicked, this, [this]() {
        emit financeRequested();
    });
    connect(warehouseButton, &QPushButton::clicked, this, [this]() {
        emit storeRequested();
    });
    connect(addEmployeeButton, &QPushButton::clicked, this, [this]() {
        emit addEmployeeRequested();
    });


    localButton = new QPushButton(u8"", this);
    localButton->setGeometry(265,60,330,75); // 调整此位置以适应屏幕
    localButton->setStyleSheet("QPushButton {"
                                   " border: none; "
                                   "background-image: url(:new/prefix1/local.jpg); "
                                   "background-repeat: no-repeat; "
                                   "background-position: center; }");
    connect(localButton, &QPushButton::pressed, this, [this]() {
        localButton->setStyleSheet("QPushButton {"
                                       " border: none; "
                                       "background-image: url(:/new/prefix1/local2.jpg); "
                                       "background-repeat: no-repeat; "
                                       "background-position: center; }");
    });


    connect(localButton, &QPushButton::released, this, [this]() {
        localButton->setStyleSheet("QPushButton {"
                                       " border: none; "
                                       "background-image: url(:/new/prefix1/local.jpg); "
                                       "background-repeat: no-repeat; "
                                       "background-position: center; }");
    });

    remoteButton = new QPushButton(u8"", this);
    remoteButton->setGeometry(600,60,330,75); // 调整此位置以适应屏幕
    remoteButton->setStyleSheet("QPushButton {"
                               " border: none; "
                               "background-image: url(:new/prefix1/remote.jpg); "
                               "background-repeat: no-repeat; "
                               "background-position: center; }");
    connect(remoteButton, &QPushButton::pressed, this, [this]() {
        remoteButton->setStyleSheet("QPushButton {"
                                   " border: none; "
                                   "background-image: url(:/new/prefix1/remote2.jpg); "
                                   "background-repeat: no-repeat; "
                                   "background-position: center; }");
    });


    connect(remoteButton, &QPushButton::released, this, [this]() {
        remoteButton->setStyleSheet("QPushButton {"
                                   " border: none; "
                                   "background-image: url(:/new/prefix1/remote.jpg); "
                                   "background-repeat: no-repeat; "
                                   "background-position: center; }");
    });



        connect(localButton, &QPushButton::clicked, this, &Page13::openLocalDialog);
        connect(remoteButton, &QPushButton::clicked, this, &Page13::openRemoteDialog);



        // 创建返回按钮
            frontButton = new QPushButton(u8"", this);
            frontButton->setGeometry(1050,0,170,55); // 调整此位置以适应屏幕
            frontButton->setStyleSheet("QPushButton {"
                                     " border: none; "
                                     "background-image: url(:new/prefix1/tuichudenglu.jpg); "
                                     "background-repeat: no-repeat; "
                                     "background-position: center; }");


            connect(frontButton, &QPushButton::pressed, this, [this]() {
                frontButton->setStyleSheet("QPushButton {"
                                         " border: none; "
                                         "background-image: url(:/new/prefix1/tuichudenglu2.jpg); "
                                         "background-repeat: no-repeat; "
                                         "background-position: center; }");
            });
            connect(frontButton, &QPushButton::released, this, [this]() {
                frontButton->setStyleSheet("QPushButton {"
                                         " border: none; "
                                         "background-image: url(:/new/prefix1/tuichudenglu.jpg); "
                                         "background-repeat: no-repeat; "
                                         "background-position: center; }");
            });

       connect(frontButton, &QPushButton::clicked, this, &Page13::onFrontButtonClicked);
       QVBoxLayout* backLayout = new QVBoxLayout(this);
       setLayout(backLayout);

        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(localButton);
        layout->addWidget(remoteButton);

        setLayout(layout);




    setLayout(mainLayout);
}

void Page13::financeHide() {
    financeButton->hide();
}

void Page13::signuphide() {
    addEmployeeButton->hide();
}

void Page13::clearOldChart() {
    if (chartView) {
        mainLayout->removeWidget(chartView);
        delete chartView;
        chartView = nullptr;
    }
}

void Page13::generateCurrentDatabaseDataChart() {
    // 清除旧的图表视图
    clearOldChart();

    // 获取数据库行数数据
    DatabaseManager &dbManager = DatabaseManager::instance();
    QList<int> rowCounts = dbManager.getTableRowCounts();

    // 设置类别名称（横坐标）
    QStringList categories = { "账户信息", "订单", "财务", "入库记录", "库存" };

    // 创建柱状图数据集
    QBarSet *set = new QBarSet("行数");

    for (int count : rowCounts) {
        // 将负值替换为零
        if (count < 0) {
            *set << 0;
        } else {
            *set << count;
        }
    }

    // 创建柱状图系列
    QBarSeries *series = new QBarSeries();
    series->append(set);

    // 创建图表
    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->setTitle("当前数据库数据量");
    chart->setAnimationOptions(QChart::AllAnimations);

    // 设置X轴
    QBarCategoryAxis *axisX = new QBarCategoryAxis();
    axisX->append(categories);
    chart->addAxis(axisX, Qt::AlignBottom);
    series->attachAxis(axisX);

    // 设置Y轴
    QValueAxis *axisY = new QValueAxis();
    axisY->setRange(0, 20);
    axisY->setTitleText("数据行数");
    chart->addAxis(axisY, Qt::AlignLeft);
    series->attachAxis(axisY);

    // 设置图例
    chart->legend()->setVisible(true);
    chart->legend()->setAlignment(Qt::AlignBottom);

    // 创建图表视图
    chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    // 设置布局
    mainLayout->setContentsMargins(265, 135, 0, 0); // 设置外边距以控制图表位置
    mainLayout->addWidget(chartView);
}








Page13::~Page13()
{
    if (localDialog) delete localDialog;
    if (remoteDialog) delete remoteDialog;
}

void Page13::openLocalDialog()
{
    if (!localDialog) {
        localDialog = new LocalDialog(this);

        connect(localDialog, &LocalDialog::accepted, [=]() {
            QString localDbName = localDialog->getLocalDbName();
            DatabaseManager& dbManager = DatabaseManager::instance();
            dbManager.saveSqliteConfig(localDbName);

            if (dbManager.connectToSqlite(localDbName)) {
                //qDEbug() << "Connected to local database: " << localDbName;
            } else {
                //qDEbug() << "Failed to connect to local database.";
            }

            delete localDialog;
            localDialog = nullptr;
        });

        connect(localDialog, &LocalDialog::rejected, [=]() {
            delete localDialog;
            localDialog = nullptr;
        });
    }
    localDialog->exec();
    generateCurrentDatabaseDataChart();
}

void Page13::openRemoteDialog()
{
    if (!remoteDialog) {
        remoteDialog = new RemoteDialog(this);

        connect(remoteDialog, &RemoteDialog::accepted, [=]() {
            QString host = remoteDialog->getHost();
            int port = remoteDialog->getPort().toInt();
            QString remoteDbName = remoteDialog->getRemoteDbName();
            QString username = remoteDialog->getUsername();
            QString password = remoteDialog->getPassword();

            DatabaseManager& dbManager = DatabaseManager::instance();
            dbManager.saveDatabaseConfig("QMYSQL", host, port, remoteDbName, username, password);

            if (dbManager.connectToMySQL(host, port, remoteDbName, username, password)) {
                //qDEbug() << "Connected to remote database: " << remoteDbName;
            } else {
                //qDEbug() << "Failed to connect to remote database.";
            }

            delete remoteDialog;
            remoteDialog = nullptr;
        });

        connect(remoteDialog, &RemoteDialog::rejected, [=]() {
            delete remoteDialog;
            remoteDialog = nullptr;
        });
    }
    remoteDialog->exec();
    generateCurrentDatabaseDataChart();

}
void Page13::onFrontButtonClicked()
{
    QMessageBox msgBox;
    msgBox.setText("确定退出登录吗?");
    msgBox. setWindowTitle("退出登录");
    msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
    msgBox.button(QMessageBox::Ok)->setText("确认");
    msgBox.button(QMessageBox::Cancel)->setText("取消");
    msgBox.setStyleSheet(
        "QMessageBox {"
        "  background-color: #FFFFFF;"
        "}"
        "QMessageBox QLabel {"
        "  font-size: 18px;"
        "  font-weight: bold;"
        "  color: black;"
        "}"
        "QMessageBox QPushButton {"
        "  font-size: 18px;"
        "  font-weight: bold;"
        "  border: 2px solid #E0E0E0;"
        "  border-radius: 20px;"
        "  padding: 10px;"
        "  background-color: #0093D1;"
        "  color: white;"
        "}"
    );

    if (msgBox.exec() == QMessageBox::Ok) {
        emit pageRequested1();
    }
}
